Donne moi les chiffres quand tu as fini, j’insèrerai
PRISMAstatement::prisma(found = 750,
found_other = 123,
no_dupes = 776,
screened = 776,
screen_exclusions = 13,
full_text = 763,
full_text_exclusions = 17,
qualitative = 746,
quantitative = 319,
width = 800, height = 1200)
dat_out_agg %>%
group_by(outcome_RDoC_agg) %>%
summarise(n_exp = sum(n_exp_out),
n_nexp = sum(n_nexp_out),
nstudy1 = n(),
n_study2 = length(unique(ID_prec)))
## # A tibble: 4 x 5
## outcome_RDoC_agg n_exp n_nexp nstudy1 n_study2
## <chr> <dbl> <dbl> <int> <int>
## 1 Mixed social processes 6192 5843 87 87
## 2 Reception of facial communication 2785 3124 45 45
## 3 Reception of non-facial communication 539 732 9 9
## 4 Understanding mental states 2818 2650 60 60
synth_n = dat_out %>%
group_by(outcome_RDoC) %>%
summarise(n_exp = sum(n_exp_out),
n_nexp = sum(n_nexp_out),
nstudy1 = n(),
n_study2 = length(unique(ID_prec)))
synth_n
## # A tibble: 8 x 5
## outcome_RDoC n_exp n_nexp nstudy1 n_stu~1
## <chr> <dbl> <dbl> <int> <int>
## 1 Mixed social processes (adjusted) 277 306 8 8
## 2 Mixed social processes (non-adjusted) 6046 5685 82 82
## 3 Reception of facial communication (adjusted) 1064 1577 7 7
## 4 Reception of facial communication (non-adjusted) 1873 1703 41 41
## 5 Reception of non-facial communication (adjusted) 261 542 3 3
## 6 Reception of non-facial communication (non-adjus~ 351 254 7 7
## 7 Understanding mental states (adjusted) 245 274 9 9
## 8 Understanding mental states (non-adjusted) 2712 2536 56 56
## # ... with abbreviated variable name 1: n_study2
ggplot(dat.meta, aes(x = es_adj, y = es)) +
geom_jitter(alpha = 0.3, width = 0.35, size = 2) +
geom_violin(size = 0.5, alpha = 0.5) +
theme_bw()
2 plots, tu choisis celui qui tu préfères
ggplot(dat.meta, aes(x = outcome_RDoC_agg, y = es)) +
geom_jitter(width = 0.05, dotsize = 0.1, alpha = 0.2, aes(fill = ID)) + geom_boxplot(trim=FALSE, alpha = 0.6) +
facet_grid(es_adj ~ "") +
theme_bw() +
labs(y = "Standardized mean difference (SMD)", x = "") +
guides(fill=FALSE) +
coord_flip()
ggplot(dat.meta, aes(x = outcome_RDoC_agg, y = es)) +
geom_violin(aes(fill = outcome_RDoC_agg), alpha = 0.3) +
geom_jitter(alpha = 0.2, width = 0.1) +
geom_boxplot(width=0.1)+
facet_grid(es_adj ~ "") +
theme_bw() +
labs(y = "Standardized mean difference (SMD)", x = "") +
theme(text = element_text(size = 18),
legend.position = "none",
axis.title.y = element_text(size=12, face="bold"),
axis.title.x = element_text(size=12, face="bold")) +
coord_flip()
V.SCE <- with(dat.meta,
clubSandwich::impute_covariance_matrix(
vi = se^2,
cluster = ID_study,
r = 0.8,
return_list = FALSE,
smooth_vi = TRUE,
subgroup = outcome_RDoC))
# all.equal(dat.meta$se^2, diag(unlist(V.SCE)))
SCE <- metafor::rma.mv(yi = es, V = V.SCE,
data = dat.meta,
mods = ~ outcome_RDoC - 1,
random = ~ outcome_RDoC | ID_study,
struct = "DIAG",
sparse = TRUE)
SCE.ISQ <- metafor::rma.mv(yi = es, V = V.SCE,
data = dat.meta,
mods = ~ outcome_RDoC - 1)
het = function(x, y) {
i2 = NA
for (i in 1:nrow(vcov(x))) {
i2[i] = 100 * (vcov(x)[i,i] - vcov(y)[i,i]) / vcov(x)[i,i]
}
return(i2)
}
#
# W <- solve(V.SCE)
# X <- model.matrix(SCE)
# P <- W - W %*% X %*% solve(t(X) %*% W %*% X) %*% t(X) %*% W
# 100 * SCE$tau2 / (SCE$tau2 + (SCE$k-SCE$p)/sum(diag(P)))
res.SCE <- data.frame(clubSandwich::coef_test(SCE, vcov = "CR2", cluster = dat.meta$ID_study)) # , cluster = df.ES$researchgroup
res.SCE.ci = data.frame(clubSandwich::conf_int(SCE, vcov = "CR2", cluster = dat.meta$ID_study))
res.SCE$target <- gsub("outcome_RDoC", "", row.names(res.SCE))
res.SCE.ci$target <- gsub("outcome_RDoC", "", row.names(res.SCE.ci))
res.SCE = dplyr::left_join(res.SCE, res.SCE.ci)
res.SCE$I2 = het(SCE, SCE.ISQ)
res_main <- left_join(res.SCE, dat_RDoC)
## Joining, by = "target"
res_main[,c("beta", "SE", "tstat", "df", "p_Satt", "CI_L", "CI_U", "I2", "n_studies", "n_nexp_out" , "n_exp_out")] <- apply(res_main[,c("beta", "SE", "tstat", "df", "p_Satt", "CI_L", "CI_U", "I2", "n_studies", "n_nexp_out" , "n_exp_out")], 2, function(x) round(x, 3))
DT::datatable(res_main,
rownames = FALSE,
extensions = 'Buttons',
options = list( # options
buttons = c('copy', 'excel'),
scrollX = TRUE,
dom = c('ftB'),
autoWidth = TRUE,
columnDefs = list(
list(className = 'dt-center',
targets = "_all"))))
res_main$SE_COR = (res_main$CI_U - res_main$CI_L) / 3.92
res_main$raw_outcome <- gsub(r"{\s*\([^\)]+\)}","",
as.character(res_main$outcome_RDoC))
tab.plot <- data.frame(
Outcome = do.call(rbind, lapply(res_main$outcome_RDoC,
function(x) paste(strwrap(x, width = 60),
collapse = "\n"))),
n_ADHD = res_main$n_exp_out,
n_nexpT = res_main$n_nexp_out,
n_studies = res_main$n_studies,
I2 = paste0(round(res_main$I2), "%"))
value_num_plot = data.frame(apply(res_main[, c("beta", "SE_COR")], 2, function(x) as.numeric(as.character(x))))
forest_modif(x = value_num_plot[ ,c("beta", "SE_COR")],
variant = "classic",
col = "Greys", xlab = "SMD", annotate_CI = TRUE,
study_table = tab.plot,
group = res_main$raw_outcome,
type = "study_only",
text_size = 3.5,
x_limit = c(-1, 2),
N = tab.plot$n_ADHD + tab.plot$n_nexpT,
x_breaks = seq(-3, 3, 1)
)
# windows() ## create window to plot your file
# metafor::profile.rma.mv(SCE)
# dev.off()
meta.reg <- metafor::rma.mv(yi = es, V = se^2,
data = dat.borenstein,
random = ~ outcome_RDoC | ID_study,
struct = "DIAG",
mods = ~ outcome_RDoC - 1)
meta.reg$beta = round(meta.reg$beta, 3)
meta.reg$se = round(meta.reg$se, 3)
meta.reg$pval = round(meta.reg$pval, 3)
res.S1.clean = data.frame(
beta = meta.reg$beta,
se = meta.reg$se,
pval = meta.reg$pval,
target = gsub("outcome_RDoC", "", row.names(meta.reg$b)))
res.S1 <- left_join(res.S1.clean, dat_RDoC)
## Joining, by = "target"
DT::datatable(res.S1,
rownames = FALSE,
extensions = 'Buttons',
options = list( # options
buttons = c('copy', 'excel'),
scrollX = TRUE,
dom = c('ftB'),
autoWidth = TRUE,
columnDefs = list(
list(className = 'dt-center',
targets = "_all"))))
robu.main <- robumeta::robu(es ~ outcome_RDoC - 1,
data = dat.meta,
studynum = ID_study,
var.eff.size = se^2,
modelweights = "CORR",
small = TRUE,
rho = 0.8)
dat_robu_main = cbind(
robu.main$reg_table$labels,
round(robu.main$reg_table[,2:(ncol(robu.main$reg_table) -1)], 3))
DT::datatable(dat_robu_main,
rownames = FALSE,
extensions = 'Buttons',
options = list( # options
buttons = c('copy', 'excel'),
scrollX = TRUE,
dom = c('ftB'),
autoWidth = TRUE,
columnDefs = list(
list(className = 'dt-center',
targets = "_all"))))
Nakaraga method
dat.meta$inv_n_tilda <- with(dat.meta, (n_nexp + n_exp)/(n_nexp*n_exp))
dat.meta$sqrt_inv_n_tilda <- with(dat.meta, sqrt(inv_n_tilda))
nak.pb = metafor::rma.mv(yi = es, V = V.SCE,
data = dat.meta,
mods = ~ 1 + sqrt_inv_n_tilda + outcome_RDoC,
random = ~ outcome_RDoC | ID_study,
struct = "DIAG",
sparse = TRUE)
clubSandwich::coef_test(nak.pb, vcov = "CR2", cluster = dat.meta$ID_study)
## Coef. Estimate
## 1 intrcpt 0.131
## 2 sqrt_inv_n_tilda 5.218
## 3 outcome_RDoCMixed social processes (non-adjusted) -0.116
## 4 outcome_RDoCReception of facial communication (adjusted) -0.712
## 5 outcome_RDoCReception of facial communication (non-adjusted) -0.790
## 6 outcome_RDoCReception of non-facial communication (adjusted) -0.688
## 7 outcome_RDoCReception of non-facial communication (non-adjusted) -0.975
## 8 outcome_RDoCUnderstanding mental states (adjusted) -0.851
## 9 outcome_RDoCUnderstanding mental states (non-adjusted) -0.619
## SE t-stat d.f. p-val (Satt) Sig.
## 1 0.530 0.247 8.94 0.81079
## 2 1.919 2.719 17.93 0.01411 *
## 3 0.256 -0.451 8.45 0.66310
## 4 0.309 -2.303 11.64 0.04056 *
## 5 0.264 -2.990 9.40 0.01449 *
## 6 0.372 -1.850 3.92 0.13935
## 7 0.272 -3.591 9.60 0.00525 **
## 8 0.315 -2.701 9.78 0.02267 *
## 9 0.258 -2.400 9.51 0.03849 *
PET/PEET method (Stanley 2014)
PET = metafor::rma.mv(yi = es, V = V.SCE,
data = dat.meta,
mods = ~ se^2,
random = ~ outcome_RDoC | ID_study,
struct = "DIAG",
sparse = TRUE)
clubSandwich::coef_test(PET, vcov = "CR2", cluster = dat.meta$ID_study)
## Coef. Estimate SE t-stat d.f. p-val (Satt) Sig.
## 1 intrcpt -2.89 0.454 -6.36 71.9 <0.001 ***
## 2 se 14.46 1.694 8.53 24.6 <0.001 ***
Egger’s test + ESS
dat_ess = data.frame(
meta_review = "Haza",
study = dat.borenstein$ID_study,
factor = dat.borenstein$outcome_RDoC,
value = dat.borenstein$es,
se = dat.borenstein$se,
n_cases = dat.borenstein$n_exp,
n_controls = dat.borenstein$n_nexp,
measure = "G")
umb = metaumbrella::umbrella(dat_ess)
## Analyzing factor: Understanding mental states (non-adjusted)
## Analyzing factor: Mixed social processes (non-adjusted)
## Analyzing factor: Mixed social processes (adjusted)
## Analyzing factor: Understanding mental states (adjusted)
## - An error occured when converting the standard error of G to SMD. The standard error of the SMD was assumed to be equal to 'sqrt(1/n_cases + 1/n_controls)'.
## Analyzing factor: Reception of facial communication (non-adjusted)
## Analyzing factor: Reception of non-facial communication (non-adjusted)
## - An error occured when converting the standard error of G to SMD. The standard error of the SMD was assumed to be equal to 'sqrt(1/n_cases + 1/n_controls)'.
## Analyzing factor: Reception of facial communication (adjusted)
## Analyzing factor: Reception of non-facial communication (adjusted)
umb
##
## Umbrella review:
## Factor n_studies total_n
## 1 Understanding mental states (non-adjusted) 56 4917
## 2 Mixed social processes (non-adjusted) 82 10770
## 3 Mixed social processes (adjusted) 8 583
## 4 Understanding mental states (adjusted) 9 519
## 5 Reception of facial communication (non-adjusted) 41 3168
## 6 Reception of non-facial communication (non-adjusted) 7 605
## 7 Reception of facial communication (adjusted) 7 1075
## 8 Reception of non-facial communication (adjusted) 3 497
## n_cases n_controls measure value value_CI eG eG_CI eOR
## 1 2521 2396 G 0.835 [0.68, 0.989] 0.835 [0.68, 0.989] 4.544
## 2 5570 5200 G 1.055 [0.908, 1.201] 1.055 [0.908, 1.201] 6.773
## 3 277 306 G 1.257 [0.607, 1.908] 1.257 [0.607, 1.908] 9.782
## 4 245 274 G 0.879 [0.455, 1.304] 0.879 [0.455, 1.304] 4.928
## 5 1657 1511 G 0.789 [0.603, 0.974] 0.789 [0.603, 0.974] 4.181
## 6 351 254 G 0.968 [0.525, 1.411] 0.968 [0.525, 1.411] 5.784
## 7 425 650 G 0.557 [0.355, 0.759] 0.557 [0.355, 0.759] 2.747
## 8 171 326 G 0.590 [0.008, 1.172] 0.590 [0.008, 1.172] 2.917
## eOR_CI p_value I2 PI_eG PI_eOR egger_p
## 1 [3.433, 6.015] 3.62e-26 84.410 [-0.239, 1.908] [0.648, 31.844] 6.18e-01
## 2 [5.194, 8.832] 2.70e-45 88.405 [-0.201, 2.31] [0.695, 66.008] 1.07e-04
## 3 [3.008, 31.817] 1.51e-04 91.236 [-1.084, 3.598] [0.14, 683.241] 2.73e-01
## 4 [2.283, 10.638] 4.87e-05 79.001 [-0.607, 2.366] [0.332, 73.049] 1.45e-01
## 5 [2.986, 5.852] 7.75e-17 86.138 [-0.333, 1.91] [0.547, 31.979] 4.46e-01
## 6 [2.59, 12.92] 1.86e-05 82.754 [-0.515, 2.45] [0.393, 85.127] 8.53e-01
## 7 [1.903, 3.965] 6.77e-08 55.000 [-0.024, 1.138] [0.958, 7.875] 4.78e-01
## 8 [1.015, 8.385] 4.69e-02 77.993 [-6.381, 7.561] [0, 904222.896] 7.65e-01
## ESB_p power_med JK_p largest_CI_eG largest_CI_eOR rob amstar
## 1 9.90e-01 100 5.37e-25 [-0.304, 0.449] [0.576, 2.258] NA NA
## 2 1.00e-01 100 6.07e-44 [-0.154, 0.883] [0.757, 4.957] NA NA
## 3 6.73e-01 100 1.53e-03 [0.623, 1.315] [3.095, 10.864] NA NA
## 4 3.78e-01 100 3.44e-04 [0.271, 0.939] [1.634, 5.494] NA NA
## 5 7.50e-01 100 8.10e-16 [1.259, 1.804] [9.805, 26.349] NA NA
## 6 3.58e-01 100 6.06e-04 [0.967, 1.419] [5.776, 13.118] NA NA
## 7 2.37e-01 100 6.53e-06 [0.218, 1.22] [1.484, 9.15] NA NA
## 8 4.14e-01 100 2.32e-01 [0.165, 0.879] [1.348, 4.928] NA NA
# metaumbrella::umbrella(subset(dat_ess, factor == "Mixed social processes (non-adjusted)"))[[1]]$egger$p.value
# metafor::regtest(x = dat_sub$es, sei = dat_sub$se, model = "lm", predictor="sei")$pval
Plot
ggplot(dat.borenstein, aes(x=es, y=se)) +
geom_point(alpha = 0.2) +
geom_smooth(method="lm") +
facet_wrap(~outcome_RDoC, scales='free') +
theme_bw()
## `geom_smooth()` using formula 'y ~ x'
SCE.S2 <- metafor::rma.mv(yi = es, V = V.SCE,
data = dat.meta,
mods = ~ type_publication - 1 + outcome_RDoC,
random = ~ outcome_RDoC | ID_study,
struct = "CS",
sparse = TRUE)
clubSandwich::coef_test(SCE.S2, vcov = "CR2", cluster = dat.meta$ID_study)
## Coef. Estimate
## 1 type_publicationArticle 1.340
## 2 type_publicationConférence 3.532
## 3 type_publicationPoster 0.986
## 4 type_publicationThèse 1.398
## 5 outcome_RDoCMixed social processes (non-adjusted) -0.123
## 6 outcome_RDoCReception of facial communication (adjusted) -0.798
## 7 outcome_RDoCReception of facial communication (non-adjusted) -0.734
## 8 outcome_RDoCReception of non-facial communication (adjusted) -0.777
## 9 outcome_RDoCReception of non-facial communication (non-adjusted) -0.962
## 10 outcome_RDoCUnderstanding mental states (adjusted) -0.594
## 11 outcome_RDoCUnderstanding mental states (non-adjusted) -0.568
## SE t-stat d.f. p-val (Satt) Sig.
## 1 0.196 6.828 7.15 < 0.001 ***
## 2 0.204 17.314 7.85 < 0.001 ***
## 3 0.334 2.949 1.50 0.13694
## 4 0.213 6.567 12.55 < 0.001 ***
## 5 0.204 -0.601 7.85 0.56489
## 6 0.194 -4.122 9.82 0.00215 **
## 7 0.204 -3.603 9.72 0.00505 **
## 8 0.252 -3.083 3.46 0.04467 *
## 9 0.210 -4.583 12.68 < 0.001 ***
## 10 0.208 -2.852 7.92 0.02164 *
## 11 0.202 -2.813 8.44 0.02158 *
ggplot(dat.borenstein, aes(x = type_publication, y = es)) +
geom_point(size = 3, alpha = 0.2) +
geom_boxplot() +
theme_bw()
dat.meta.S3 = subset(dat.meta,
emot_spec %in% c("Happy", "Sad", "Surprise", "Fear", "Disgust", "Anger") &
grepl("Reception of facial", dat.meta$outcome_RDoC, fixed = TRUE) &
!grepl("(adjusted)", dat.meta$outcome_RDoC, fixed = TRUE))
V.SCE.S3 <- with(dat.meta.S3,
clubSandwich::impute_covariance_matrix(
vi = se^2,
cluster = ID_study,
r = 0.8,
return_list = FALSE,
smooth_vi = TRUE,
subgroup = emot_spec))
# all.equal(dat.meta$se^2, diag(unlist(V.SCE)))
SCE.S3 <- metafor::rma.mv(yi = es, V = V.SCE.S3,
data = dat.meta.S3,
mods = ~ emot_spec - 1,
random = ~ emot_spec | ID_study,
struct = "CS",
sparse = TRUE)
SCE.ISQ.S3 <- metafor::rma.mv(yi = es, V = V.SCE.S3,
data = dat.meta.S3,
mods = ~ emot_spec - 1)
res.SCE.S3 <- data.frame(clubSandwich::coef_test(SCE.S3, vcov = "CR2", cluster = dat.meta.S3$ID_study)) # , cluster = df.ES$researchgroup
res.SCE.ci.S3 = data.frame(clubSandwich::conf_int(SCE.S3, vcov = "CR2", cluster = dat.meta.S3$ID_study))
res.SCE.S3$emot_spec <- gsub("emot_spec", "", row.names(res.SCE.S3))
res.SCE.ci.S3$emot_spec <- gsub("emot_spec", "", row.names(res.SCE.ci.S3))
res.SCE.S3 = dplyr::left_join(res.SCE.S3, res.SCE.ci.S3)
## Joining, by = c("beta", "SE", "df", "emot_spec")
res.SCE.S3$I2 = het(SCE.S3, SCE.ISQ.S3)
res.SCE.clean.S3 = subset(res.SCE.S3, SE > 0.000001)
dat_emot$emot_spec = dat_emot$nom_sousdim_clean
res_S3 <- left_join(res.SCE.clean.S3, dat_emot)
## Joining, by = "emot_spec"
res_S3[,c("beta", "SE", "tstat", "df", "p_Satt", "CI_L", "CI_U", "I2", "n_studies", "n_nexp_out" , "n_exp_out")] <- apply(res_S3[,c("beta", "SE", "tstat", "df", "p_Satt", "CI_L", "CI_U", "I2", "n_studies", "n_nexp_out" , "n_exp_out")], 2, function(x) round(x, 3))
DT::datatable(res_S3,
rownames = FALSE,
options = list( # options
scrollX = TRUE,
dom = c('ft'),
autoWidth = TRUE,
columnDefs = list(
list(className = 'dt-center',
targets = "_all"))))
res_S3$raw_outcome <- gsub(r"{\s*\([^\)]+\)}","",
as.character(res_S3$nom_sousdim_clean))
tab.plot.S3 <- data.frame(
Outcome = do.call(rbind, lapply(res_S3$nom_sousdim_clean,
function(x) paste(strwrap(x, width = 60),
collapse = "\n"))),
n_ADHD = res_S3$n_exp_out,
n_nexpT = res_S3$n_nexp_out,
n_studies = res_S3$n_studies,
I2 = paste0(round(res_S3$I2), "%"))
value_num_plot_S3 = data.frame(apply(res_S3[, c("beta", "SE")], 2, function(x) as.numeric(as.character(x))))
forest_modif(x = value_num_plot_S3[ ,c("beta", "SE")],
variant = "classic",
col = "Greys", xlab = "SMD", annotate_CI = TRUE,
study_table = tab.plot.S3,
group = res_S3$raw_outcome,
type = "study_only",
text_size = 3.5,
x_limit = c(-1, 2),
N = tab.plot.S3$n_ADHD + tab.plot.S3$n_nexpT,
x_breaks = seq(-3, 3, 1)
)
dat.meta.S6 = subset(dat.meta, !is.na(age) & outcome_RDoC %in% unique(synth_n$outcome_RDoC[synth_n$nstudy1 > 20]))
V.SCE.S6 <- with(dat.meta.S6,
clubSandwich::impute_covariance_matrix(
vi = se^2,
cluster = ID_study,
r = 0.8,
return_list = FALSE,
smooth_vi = TRUE,
subgroup = outcome_RDoC))
SCE.S6 <- metafor::rma.mv(yi = es, V = V.SCE.S6,
data = dat.meta.S6,
mods = ~ age * outcome_RDoC,
random = ~ outcome_RDoC | ID_study,
struct = "CS",
sparse = TRUE)
clubSandwich::coef_test(SCE.S6, vcov = "CR2", cluster = dat.meta.S6$ID_study)
## Coef. Estimate
## 1 intrcpt 1.476497
## 2 age -0.024798
## 3 outcome_RDoCReception of facial communication (non-adjusted) -0.596185
## 4 outcome_RDoCUnderstanding mental states (non-adjusted) -0.269615
## 5 age:outcome_RDoCReception of facial communication (non-adjusted) -0.000361
## 6 age:outcome_RDoCUnderstanding mental states (non-adjusted) -0.014946
## SE t-stat d.f. p-val (Satt) Sig.
## 1 0.7772 1.89982 20.6 0.0716 .
## 2 0.0746 -0.33238 17.8 0.7435
## 3 0.8212 -0.72599 30.1 0.4734
## 4 1.0406 -0.25908 35.8 0.7971
## 5 0.0774 -0.00466 23.5 0.9963
## 6 0.0985 -0.15169 31.0 0.8804
anova(SCE.S6, btt=5:6)
##
## Test of Moderators (coefficients 5:6):
## QM(df = 2) = 0.1452, p-val = 0.9300
ggplot(dat.meta.S6, aes(x = age, y = es)) +
facet_wrap(~outcome_RDoC) +
geom_point(size = 2, alpha = 0.2) +
geom_smooth(method ="lm") +
theme_bw()
dat.meta.S6 = subset(dat.meta, !is.na(age_diff) & outcome_RDoC %in% unique(synth_n$outcome_RDoC[synth_n$nstudy1 > 20]))
V.SCE.S6 <- with(dat.meta.S6,
clubSandwich::impute_covariance_matrix(
vi = se^2,
cluster = ID_study,
r = 0.8,
return_list = FALSE,
smooth_vi = TRUE,
subgroup = outcome_RDoC))
SCE.S6 <- metafor::rma.mv(yi = es, V = V.SCE.S6,
data = dat.meta.S6,
mods = ~ age_diff * outcome_RDoC,
random = ~ outcome_RDoC | ID_study,
struct = "CS",
sparse = TRUE)
clubSandwich::coef_test(SCE.S6, vcov = "CR2", cluster = dat.meta.S6$ID_study)
## Coef.
## 1 intrcpt
## 2 age_diff
## 3 outcome_RDoCReception of facial communication (non-adjusted)
## 4 outcome_RDoCUnderstanding mental states (non-adjusted)
## 5 age_diff:outcome_RDoCReception of facial communication (non-adjusted)
## 6 age_diff:outcome_RDoCUnderstanding mental states (non-adjusted)
## Estimate SE t-stat d.f. p-val (Satt) Sig.
## 1 1.220131 0.0775 15.74581 80.80 <0.001 ***
## 2 -0.055853 0.2258 -0.24735 3.53 0.818
## 3 -0.607525 0.1038 -5.85216 60.95 <0.001 ***
## 4 -0.442129 0.1089 -4.05916 79.15 <0.001 ***
## 5 -0.023296 0.2383 -0.09778 5.13 0.926
## 6 -0.000397 0.2545 -0.00156 5.46 0.999
anova(SCE.S6, btt=5:6)
##
## Test of Moderators (coefficients 5:6):
## QM(df = 2) = 0.2707, p-val = 0.8734
ggplot(dat.meta.S6, aes(x = age_diff, y = es)) +
facet_wrap(~outcome_RDoC) +
geom_point(size = 2, alpha = 0.2) +
geom_smooth(method ="lm") +
theme_bw()
dat.meta.S7_a = subset(dat.meta, !is.na(percentage_asd) & outcome_RDoC %in% unique(synth_n$outcome_RDoC[synth_n$nstudy1 > 20]))
dat.meta.S7_a$percentage_asd = as.numeric(as.character(dat.meta.S7_a$percentage_asd))
V.SCE.S7_a <- with(dat.meta.S7_a,
clubSandwich::impute_covariance_matrix(
vi = se^2,
cluster = ID_study,
r = 0.8,
return_list = FALSE,
smooth_vi = TRUE,
subgroup = outcome_RDoC))
SCE.S7_a <- metafor::rma.mv(yi = es, V = V.SCE.S7_a,
data = dat.meta.S7_a,
mods = ~ percentage_asd * outcome_RDoC,
random = ~ outcome_RDoC | ID_study,
struct = "CS",
sparse = TRUE)
clubSandwich::coef_test(SCE.S7_a, vcov = "CR2", cluster = dat.meta.S7_a$ID_study)
## Coef.
## 1 intrcpt
## 2 percentage_asd
## 3 outcome_RDoCReception of facial communication (non-adjusted)
## 4 outcome_RDoCUnderstanding mental states (non-adjusted)
## 5 percentage_asd:outcome_RDoCReception of facial communication (non-adjusted)
## 6 percentage_asd:outcome_RDoCUnderstanding mental states (non-adjusted)
## Estimate SE t-stat d.f. p-val (Satt) Sig.
## 1 1.3629 0.09600 14.20 47.55 < 0.001 ***
## 2 0.0106 0.00218 4.84 4.64 0.00574 **
## 3 -0.7919 0.12063 -6.56 34.69 < 0.001 ***
## 4 -0.6442 0.13167 -4.89 42.75 < 0.001 ***
## 5 -0.0098 0.00218 -4.49 2.61 0.02746 *
## 6 -0.0075 0.00250 -3.00 3.48 0.04758 *
anova(SCE.S7_a, btt=5:6)
##
## Test of Moderators (coefficients 5:6):
## QM(df = 2) = 188.3760, p-val < .0001
SCE.S7_a_ph = metafor::rma.mv(yi = es, V = V.SCE.S7_a,
data = dat.meta.S7_a,
mods = ~ percentage_asd : outcome_RDoC - 1,
random = ~ outcome_RDoC | ID_study,
struct = "CS",
sparse = TRUE)
SCE.S7_a_ph
##
## Multivariate Meta-Analysis Model (k = 372; method: REML)
##
## Variance Components:
##
## outer factor: ID_study (nlvls = 76)
## inner factor: outcome_RDoC (nlvls = 3)
##
## estim sqrt fixed
## tau^2 1.4117 1.1882 no
## rho 0.7647 no
##
## Test for Residual Heterogeneity:
## QE(df = 369) = 8126.5346, p-val < .0001
##
## Test of Moderators (coefficients 1:3):
## QM(df = 3) = 493.2660, p-val < .0001
##
## Model Results:
##
## estimate
## percentage_asd:outcome_RDoCMixed social processes (non-adjusted) 0.0107
## percentage_asd:outcome_RDoCReception of facial communication (non-adjusted) 0.0008
## percentage_asd:outcome_RDoCUnderstanding mental states (non-adjusted) 0.0031
## se
## percentage_asd:outcome_RDoCMixed social processes (non-adjusted) 0.0005
## percentage_asd:outcome_RDoCReception of facial communication (non-adjusted) 0.0006
## percentage_asd:outcome_RDoCUnderstanding mental states (non-adjusted) 0.0005
## zval
## percentage_asd:outcome_RDoCMixed social processes (non-adjusted) 21.3841
## percentage_asd:outcome_RDoCReception of facial communication (non-adjusted) 1.2724
## percentage_asd:outcome_RDoCUnderstanding mental states (non-adjusted) 5.8903
## pval
## percentage_asd:outcome_RDoCMixed social processes (non-adjusted) <.0001
## percentage_asd:outcome_RDoCReception of facial communication (non-adjusted) 0.2032
## percentage_asd:outcome_RDoCUnderstanding mental states (non-adjusted) <.0001
## ci.lb
## percentage_asd:outcome_RDoCMixed social processes (non-adjusted) 0.0097
## percentage_asd:outcome_RDoCReception of facial communication (non-adjusted) -0.0004
## percentage_asd:outcome_RDoCUnderstanding mental states (non-adjusted) 0.0020
## ci.ub
## percentage_asd:outcome_RDoCMixed social processes (non-adjusted) 0.0117
## percentage_asd:outcome_RDoCReception of facial communication (non-adjusted) 0.0019
## percentage_asd:outcome_RDoCUnderstanding mental states (non-adjusted) 0.0041
##
## percentage_asd:outcome_RDoCMixed social processes (non-adjusted) ***
## percentage_asd:outcome_RDoCReception of facial communication (non-adjusted)
## percentage_asd:outcome_RDoCUnderstanding mental states (non-adjusted) ***
##
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
clubSandwich::coef_test(SCE.S7_a_ph, vcov = "CR2", cluster = dat.meta.S7_a$ID_study)
## Coef.
## 1 percentage_asd:outcome_RDoCMixed social processes (non-adjusted)
## 2 percentage_asd:outcome_RDoCReception of facial communication (non-adjusted)
## 3 percentage_asd:outcome_RDoCUnderstanding mental states (non-adjusted)
## Estimate SE t-stat d.f. p-val (Satt) Sig.
## 1 0.010722 2.23e-03 4.81 4.56 0.00616 **
## 2 0.000757 5.06e-05 14.95 1.00 0.04252 *
## 3 0.003064 1.70e-03 1.80 1.23 0.28520
ggplot(dat.meta.S7_a, aes(x = percentage_asd, y = es)) +
facet_wrap(~outcome_RDoC) +
geom_point(size = 2, alpha = 0.2) +
geom_smooth(method ="lm") +
theme_bw()
dat.meta.S7_b = subset(dat.meta, !is.na(percentage_cd_odd) & outcome_RDoC %in% unique(synth_n$outcome_RDoC[synth_n$nstudy1 > 20]))
dat.meta.S7_b$percentage_cd_odd = as.numeric(as.character(dat.meta.S7_b$percentage_cd_odd))
V.SCE.S7_b <- with(dat.meta.S7_b,
clubSandwich::impute_covariance_matrix(
vi = se^2,
cluster = ID_study,
r = 0.8,
return_list = FALSE,
smooth_vi = TRUE,
subgroup = outcome_RDoC))
SCE.S7_b <- metafor::rma.mv(yi = es, V = V.SCE.S7_b,
data = dat.meta.S7_b,
mods = ~ percentage_cd_odd * outcome_RDoC,
random = ~ outcome_RDoC | ID_study,
struct = "CS",
sparse = TRUE)
clubSandwich::coef_test(SCE.S7_b, vcov = "CR2", cluster = dat.meta.S7_b$ID_study)
## Coef.
## 1 intrcpt
## 2 percentage_cd_odd
## 3 outcome_RDoCReception of facial communication (non-adjusted)
## 4 outcome_RDoCUnderstanding mental states (non-adjusted)
## 5 percentage_cd_odd:outcome_RDoCReception of facial communication (non-adjusted)
## 6 percentage_cd_odd:outcome_RDoCUnderstanding mental states (non-adjusted)
## Estimate SE t-stat d.f. p-val (Satt) Sig.
## 1 1.20328 0.12758 9.43 34.75 < 0.001 ***
## 2 0.00372 0.00248 1.50 1.22 0.34049
## 3 -0.54279 0.16076 -3.38 45.03 0.00152 **
## 4 -0.35872 0.16364 -2.19 46.18 0.03344 *
## 5 -0.00382 0.00275 -1.39 1.83 0.30917
## 6 -0.00459 0.00266 -1.72 1.69 0.24909
anova(SCE.S7_b, btt=5:6)
##
## Test of Moderators (coefficients 5:6):
## QM(df = 2) = 19.4782, p-val < .0001
SCE.S7_b_ph = metafor::rma.mv(yi = es, V = V.SCE.S7_b,
data = dat.meta.S7_b,
mods = ~ percentage_cd_odd : outcome_RDoC - 1,
random = ~ outcome_RDoC | ID_study,
struct = "CS",
sparse = TRUE)
clubSandwich::coef_test(SCE.S7_b_ph, vcov = "CR2", cluster = dat.meta.S7_b$ID_study)
## Coef.
## 1 percentage_cd_odd:outcome_RDoCMixed social processes (non-adjusted)
## 2 percentage_cd_odd:outcome_RDoCReception of facial communication (non-adjusted)
## 3 percentage_cd_odd:outcome_RDoCUnderstanding mental states (non-adjusted)
## Estimate SE t-stat d.f. p-val (Satt) Sig.
## 1 0.004281 0.00180 2.3812 1.17 0.223
## 2 -0.000039 0.00120 -0.0325 2.32 0.977
## 3 -0.000671 0.00106 -0.6325 1.31 0.619
ggplot(dat.meta.S7_b, aes(x = percentage_cd_odd, y = es)) +
facet_wrap(~outcome_RDoC) +
geom_point(size = 2, alpha = 0.2) +
geom_smooth(method ="lm") +
theme_bw()
dat.meta.S8 = subset(dat.meta, !is.na(sex) & outcome_RDoC %in% unique(synth_n$outcome_RDoC[synth_n$nstudy1 > 20]))
dat.meta.S8$sex = as.numeric(as.character(dat.meta.S8$sex))
dat.meta.S8$sex[dat.meta.S8$sex > 100] <- NA
V.SCE.S8 <- with(dat.meta.S8,
clubSandwich::impute_covariance_matrix(
vi = se^2,
cluster = ID_study,
r = 0.8,
return_list = FALSE,
smooth_vi = TRUE,
subgroup = outcome_RDoC))
SCE.S8 <- metafor::rma.mv(yi = es, V = V.SCE.S8,
data = dat.meta.S8,
mods = ~ sex * outcome_RDoC,
random = ~ outcome_RDoC | ID_study,
struct = "CS",
sparse = TRUE)
clubSandwich::coef_test(SCE.S8, vcov = "CR2", cluster = dat.meta.S8$ID_study)
## Coef. Estimate
## 1 intrcpt 1.37576
## 2 sex -0.00555
## 3 outcome_RDoCReception of facial communication (non-adjusted) -0.84201
## 4 outcome_RDoCUnderstanding mental states (non-adjusted) -0.55380
## 5 sex:outcome_RDoCReception of facial communication (non-adjusted) 0.00797
## 6 sex:outcome_RDoCUnderstanding mental states (non-adjusted) 0.00397
## SE t-stat d.f. p-val (Satt) Sig.
## 1 0.17699 7.773 25.55 < 0.001 ***
## 2 0.00589 -0.943 6.05 0.38199
## 3 0.24797 -3.396 14.52 0.00416 **
## 4 0.21692 -2.553 24.60 0.01728 *
## 5 0.00887 0.899 6.98 0.39886
## 6 0.00660 0.601 10.69 0.56020
anova(SCE.S8, btt=5:6)
##
## Test of Moderators (coefficients 5:6):
## QM(df = 2) = 2.9956, p-val = 0.2236
ggplot(dat.meta.S8, aes(x = sex, y = es)) +
facet_wrap(~outcome_RDoC) +
geom_point(size = 2, alpha = 0.2) +
geom_smooth(method ="lm") +
theme_bw()
dat.meta.S9 = subset(dat.meta, !is.na(iq) & outcome_RDoC %in% unique(synth_n$outcome_RDoC[synth_n$nstudy1 > 20]))
dat.meta.S9$iq = as.numeric(as.character(dat.meta.S9$iq))
# dat.meta.S9$iq[dat.meta.S9$iq > 100] <- NA
V.SCE.S9 <- with(dat.meta.S9,
clubSandwich::impute_covariance_matrix(
vi = se^2,
cluster = ID_study,
r = 0.8,
return_list = FALSE,
smooth_vi = TRUE,
subgroup = outcome_RDoC))
SCE.S9 <- metafor::rma.mv(yi = es, V = V.SCE.S9,
data = dat.meta.S9,
mods = ~ iq * outcome_RDoC,
random = ~ outcome_RDoC | ID_study,
struct = "CS",
sparse = TRUE)
clubSandwich::coef_test(SCE.S9, vcov = "CR2", cluster = dat.meta.S9$ID_study)
## Coef. Estimate
## 1 intrcpt -0.62179
## 2 iq 0.01834
## 3 outcome_RDoCReception of facial communication (non-adjusted) 1.49681
## 4 outcome_RDoCUnderstanding mental states (non-adjusted) -1.53908
## 5 iq:outcome_RDoCReception of facial communication (non-adjusted) -0.02173
## 6 iq:outcome_RDoCUnderstanding mental states (non-adjusted) 0.00867
## SE t-stat d.f. p-val (Satt) Sig.
## 1 6.3577 -0.0978 5.77 0.925
## 2 0.0610 0.3006 5.95 0.774
## 3 6.2629 0.2390 7.97 0.817
## 4 8.0869 -0.1903 5.21 0.856
## 5 0.0600 -0.3621 7.92 0.727
## 6 0.0772 0.1123 5.02 0.915
anova(SCE.S9, btt=5:6)
##
## Test of Moderators (coefficients 5:6):
## QM(df = 2) = 1.9952, p-val = 0.3688
ggplot(dat.meta.S9, aes(x = iq, y = es)) +
facet_wrap(~outcome_RDoC) +
geom_point(size = 2, alpha = 0.2) +
geom_smooth(method ="lm") +
theme_bw()
dat.meta.S9 = subset(dat.meta, !is.na(iq_diff) & outcome_RDoC %in% unique(synth_n$outcome_RDoC[synth_n$nstudy1 > 20]))
dat.meta.S9$iq_diff = as.numeric(as.character(dat.meta.S9$iq_diff))
SCE.S9 <- metafor::rma.mv(yi = es, V = V.SCE.S9,
data = dat.meta.S9,
mods = ~ iq_diff * outcome_RDoC,
random = ~ outcome_RDoC | ID_study,
struct = "CS",
sparse = TRUE)
clubSandwich::coef_test(SCE.S9, vcov = "CR2", cluster = dat.meta.S9$ID_study)
## Coef. Estimate
## 1 intrcpt 1.35216
## 2 iq_diff 0.00915
## 3 outcome_RDoCReception of facial communication (non-adjusted) -0.81242
## 4 outcome_RDoCUnderstanding mental states (non-adjusted) -0.59370
## 5 iq_diff:outcome_RDoCReception of facial communication (non-adjusted) -0.01254
## 6 iq_diff:outcome_RDoCUnderstanding mental states (non-adjusted) 0.00430
## SE t-stat d.f. p-val (Satt) Sig.
## 1 0.3691 3.6629 29.78 <0.001 ***
## 2 0.0398 0.2301 5.81 0.8259
## 3 0.3572 -2.2744 24.99 0.0318 *
## 4 0.4304 -1.3795 22.01 0.1816
## 5 0.0426 -0.2943 3.20 0.7866
## 6 0.0484 0.0887 5.75 0.9323
anova(SCE.S9, btt=5:6)
##
## Test of Moderators (coefficients 5:6):
## QM(df = 2) = 1.6636, p-val = 0.4353
ggplot(dat.meta.S9, aes(x = iq_diff, y = es)) +
facet_wrap(~outcome_RDoC) +
geom_point(size = 2, alpha = 0.2) +
geom_smooth(method ="lm") +
theme_bw()
dat.meta.S10 = subset(dat.meta, !is.na(rob_tot) & outcome_RDoC %in% unique(synth_n$outcome_RDoC[synth_n$nstudy1 > 20]))
V.SCE.S10 <- with(dat.meta.S10,
clubSandwich::impute_covariance_matrix(
vi = se^2,
cluster = ID_study,
r = 0.8,
return_list = FALSE,
smooth_vi = TRUE,
subgroup = outcome_RDoC))
SCE.S10 <- metafor::rma.mv(yi = es, V = V.SCE.S10,
data = dat.meta.S10,
mods = ~ rob_tot * outcome_RDoC,
random = ~ outcome_RDoC | ID_study,
struct = "CS",
sparse = TRUE)
clubSandwich::coef_test(SCE.S10, vcov = "CR2", cluster = dat.meta.S10$ID_study)
## Coef. Estimate
## 1 intrcpt 0.79485
## 2 rob_tot 0.07323
## 3 outcome_RDoCReception of facial communication (non-adjusted) -0.64818
## 4 outcome_RDoCUnderstanding mental states (non-adjusted) -0.06789
## 5 rob_tot:outcome_RDoCReception of facial communication (non-adjusted) 0.00139
## 6 rob_tot:outcome_RDoCUnderstanding mental states (non-adjusted) -0.06304
## SE t-stat d.f. p-val (Satt) Sig.
## 1 0.1524 5.217 5.66 0.00236 **
## 2 0.0238 3.074 4.50 0.03174 *
## 3 0.3548 -1.827 18.86 0.08359 .
## 4 0.2919 -0.233 5.20 0.82499
## 5 0.0607 0.023 18.37 0.98192
## 6 0.0455 -1.386 4.61 0.22900
anova(SCE.S10, btt=5:6)
##
## Test of Moderators (coefficients 5:6):
## QM(df = 2) = 2.3662, p-val = 0.3063
ggplot(dat.meta.S10, aes(x = rob_tot, y = es)) +
facet_wrap(~outcome_RDoC) +
geom_point(size = 2, alpha = 0.2) +
geom_smooth(method ="lm") +
theme_bw()
Reception of facial communication (non-adjusted) Understanding mental
states (non-adjusted) Mixed social processes (non-adjusted)
dat.meta.S11 = subset(dat.meta, !is.na(outcome_RDoC_agg) & !is.na(es_adj) & outcome_RDoC_agg %in% c("Understanding mental states", "Mixed social processes", "Reception of facial communication"))
V.SCE.S11 <- with(dat.meta.S11,
clubSandwich::impute_covariance_matrix(
vi = se^2,
cluster = ID_study,
r = 0.8,
return_list = FALSE,
smooth_vi = TRUE,
subgroup = outcome_RDoC))
SCE.S11 <- metafor::rma.mv(yi = es, V = V.SCE.S11,
data = dat.meta.S11,
mods = ~ outcome_RDoC_agg * es_adj,
random = ~ outcome_RDoC | ID_study,
struct = "CS",
sparse = TRUE)
clubSandwich::coef_test(SCE.S11, vcov = "CR2", cluster = dat.meta.S11$ID_study)
## Coef. Estimate
## 1 intrcpt 1.356
## 2 outcome_RDoC_aggReception of facial communication -0.807
## 3 outcome_RDoC_aggUnderstanding mental states -0.600
## 4 es_adjNon-Adjusted -0.122
## 5 outcome_RDoC_aggReception of facial communication:es_adjNon-Adjusted 0.185
## 6 outcome_RDoC_aggUnderstanding mental states:es_adjNon-Adjusted 0.145
## SE t-stat d.f. p-val (Satt) Sig.
## 1 0.200 6.797 7.06 < 0.001 ***
## 2 0.201 -4.019 10.02 0.00243 **
## 3 0.211 -2.846 8.09 0.02137 *
## 4 0.209 -0.585 7.89 0.57481
## 5 0.220 0.842 12.30 0.41611
## 6 0.235 0.618 10.28 0.55015
anova(SCE.S11, btt=5:6)
##
## Test of Moderators (coefficients 5:6):
## QM(df = 2) = 0.4862, p-val = 0.7842
ggplot(dat.meta.S11, aes(x = es_adj, y = es)) +
facet_wrap(~outcome_RDoC_agg) +
geom_point(size = 2, alpha = 0.2) +
geom_boxplot(alpha = 0.2) +
geom_smooth(method ="lm") +
theme_bw()